package com.wanjia.estate.pojo.bank.nxbank;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 001302（综合收单_主扫申码）
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ZhsdZszf {

    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class ZhsdZszfRequest extends ZhsdCommonRoot<ZszfRequestService> {

    }

    @Data
    public static class ZszfRequestService implements Serializable {
        @JSONField(name = "Service_Header")
        private ZszfRequestServiceHeader serviceHeader;

        @JSONField(name = "Service_Body")
        private ZszfRequestServiceBody serviceBody;
    }

    /*固定为空*/
    @Data
    public static class ZszfRequestServiceHeader implements Serializable {


    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class ZszfRequestServiceBody extends ExtAttributesCommonRequest implements Serializable {
        @JSONField(name = "request")
        private ZszfRequest request;
    }

    @Data
    public static class ZszfRequest implements Serializable {
        /**
         * 商户号
         */
        @JSONField(name = "terminal_unitno")
        private String terminalUnitno;
        /**
         * 商户名称
         */
        @JSONField(name = "terminal_name")
        private String terminalName;
        /**
         * 结算账号
         */
        @JSONField(name = "terminal_acctno")
        private String terminalAcctno;
        /**
         * 密钥
         */
        @JSONField(name = "INM-ENC-DEV-ID")
        private String inmEncDevId;
        /**
         *
         */
        @JSONField(name = "feeflag")
        private String feeflag;
        /**
         *
         */
        @JSONField(name = "discountrate")
        private String discountrate;
        /**
         *
         */
        @JSONField(name = "trans_acc_flag")
        private String transAccFlag;
        /**
         * 接口接入方
         * 接口平台1
         */
        @JSONField(name = "sysFlag")
        private String sysFlag;
        /**
         * Mac 值
         * data 节点值计算Mac 的值截取前8 位
         */
        @JSONField(name = "macValue")
        private String macValue;
        /**
         * 算法类型
         */
        @JSONField(name = "keyType")
        private String keyType;
        /**
         * 终端号
         */
        @JSONField(name = "deviceId")
        private String deviceId;
        /**
         * 店员号
         */
        @JSONField(name = "staffId")
        private String staffId;
        /**
         * 接口版本号
         */
        @JSONField(name = "version")
        private String version;
        /**
         * 接入渠道
         * 0-esb
         * 1-pos
         * 2- 手机银行
         * 3- 收款APP
         * 4- 商户收单系统
         * 5-其他
         */
        @JSONField(name = "apiFlag")
        private String apiFlag;
        /**
         * 交易类型
         * 交易接口唯一识别码1102。
         */
        @JSONField(name = "transType")
        private String transType;
        /**
         * 商户号
         * 综合收单分配的商户号。
         */
        @JSONField(name = "mchntCd")
        private String mchntCd;
        /**
         * 门店号
         * 登录号为门店用户时必输
         */
        @JSONField(name = "shopId")
        private String shopId;
        /**
         * 渠道流水
         * 商户或终端自行生成的订单流水号。
         */
        @JSONField(name = "traceNo")
        private String traceNo;
        /**
         * 交易金额
         * 单位为分
         */
        @JSONField(name = "transAmount")
        private String transAmount;
        /**
         * 订单支付结果异步通知地址
         */
        @JSONField(name = "notifyUrl")
        private String notifyUrl;
        /**
         * 备注
         */
        @JSONField(name = "remark")
        private String remark;
        /**
         * 二维码有效时间
         * 默认180s
         */
        @JSONField(name = "qrValidTime")
        private String qrValidTime;
        /**
         * 是否本行二维码标志
         * 是否本行二维码是否本行二维码交易：
         * 1 是0 否
         */
        @JSONField(name = "ownerFlag")
        private String ownerFlag;
        /**
         * 经度
         */
        @JSONField(name = "longitude")
        private String longitude;
        /**
         * 纬度
         */
        @JSONField(name = "latitude")
        private String latitude;
        /**
         * 终端入网认证编号
         * 银行卡受理终端产品入网认证编号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行分配。格式：5 位字符，例如P3100
         */
        @JSONField(name = "network_license")
        private String networkLicense;
        /**
         * 商户端设备类型
         * 终端设备类型，受理方可参考终端注册时的设备类型填写，取值如下：01：自动柜员机（含ATM和CDM）和多媒体自助终端02：传统POS03：mPOS04：智能POS05：II 型固定电话1506：云闪付终端；07：保留使用；08：手机POS；09：刷脸付终端；10：条码支付受理终端；11：条码支付辅助受理终端；12: 行业终端（公交、地铁用于指定行业的终端）；13：MIS 终端；
         */
        @JSONField(name = "device_type")
        private String deviceType;
        /**
         * 终端序列号
         * 出现要求：终端类型（device_type）填写为02、03、04、05、06、08、09 或10 时，必须填写终端序列号
         */
        @JSONField(name = "serial_num")
        private String serialNum;
        /**
         * 加密随机因子
         * 仅在被扫支付类交易报文中出现：若付款码为19位数字，则取后6 位；若付款码为EMV 二维码，则取其tag 57的卡号/token号的后6 位
         */
        @JSONField(name = "encrypt_rand_num")
        private String encryptRandNum;
        /**
         * 密文数据
         * 仅在被扫支付类交易报文中出现：64bit 的密文数据，对终端硬件序列号和加密随机因子加密后的结果。本子域取值为：64bit密文数据进行base64 编码后的结果。
         */
        @JSONField(name = "secret_text")
        private String secretText;
        /**
         * 应用程序版本号
         * 终端应用程序的版本号。应用程序变更应保证版本号不重复。当长度不足时，右补空格
         */
        @JSONField(name = "app_version")
        private String appVersion;
        /**
         * 商户端设备IP
         * 商户端终端设备IP 地址。注：如经、维度信息未上送， 该字段必送。
         */
        @JSONField(name = "device_ip")
        private String deviceIp;
    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class ZhsdZszfResponse extends ZhsdCommonRoot<ZszfResponseService> {

    }


    @Data
    public static class ZszfResponseService implements Serializable {
        @JSONField(name = "Service_Header")
        private ZszfResponseServiceHeader serviceHeader;

        @JSONField(name = "Service_Body")
        private ZszfResponseServiceBody serviceBody;
    }


    @Data
    public static class ZszfResponseServiceHeader implements Serializable {
        @JSONField(name = "service_response")
        private ZszfServiceHeaderResponse serviceResponse;
    }


    @Data
    public static class ZszfServiceHeaderResponse implements Serializable {
        private String status;
        private String code;
        private String desc;
    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class ZszfResponseServiceBody extends ExtAttributesCommonResponse implements Serializable {
        @JSONField(name = "response")
        private ZszfResponse  response ;
    }


    @Data
    public static class ZszfResponse implements Serializable {
        /**
         * 返回码
         */
        private String respCode;
        /**
         * 返回信息
         */
        private String respMsg;
        /**
         *
         */
        private ZszfTransInfo transInfo;
    }


    @Data
    public static class ZszfTransInfo implements Serializable {

        /**
         * 交易金额
         */
        private String transAmount;
        /**
         * 商户或终端自行生成的订单流水号
         */
        private String traceNo;
        /**
         * 综合收单生成的订单流水号
         */
        private String outTradeNo;
        /**
         * 二维码url
         */
        private String qrcodeUrl;
        /**
         *
         */
        private String qrValidTime;
    }
}
